package br.com.projeto.web.vraptor.controllers;

import java.util.ArrayList;
import java.util.List;

import javassist.NotFoundException;
import br.com.caelum.vraptor.Get;
import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Resource;
import br.com.projeto.model.AtividadeModel;
import br.com.projeto.model.UsuarioModel;
import br.com.projeto.model.entities.Atividade;
import br.com.projeto.model.entities.Usuario;
import br.com.projeto.model.util.Periodo;

@Resource
public class MobileController {

	private AtividadeModel atividadeModel;
	private UsuarioModel usuarioModel;

	public MobileController(AtividadeModel atividadeModel,
			UsuarioModel usuarioModel) {
		this.atividadeModel = atividadeModel;
		this.usuarioModel = usuarioModel;
	}

	@Get
	@Path("/mobile/autenticar/{usuario.email}/{usuario.senha}")
	public Usuario autenticar(Usuario usuario) {
		try {
			usuario = usuarioModel.autenticar(usuario);

		} catch (NotFoundException e) {
			// TODO Retornar http 500 com mensagem de erro?
		}

		return usuario;
	}

	@Get
	@Path("/mobile/atividades/{usuario.email}/{usuario.senha}/{filtro}")
	public List<Atividade> listar(Usuario usuario, Periodo filtro) {
		Periodo periodo = filtro;
		List<Atividade> atividades = new ArrayList<Atividade>();

		try {
			usuario = usuarioModel.autenticar(usuario);
			atividades = atividadeModel.listar(periodo, usuario);
		} catch (NotFoundException e) {
			// TODO Retornar http 500 com mensagem de erro?
		}
		return atividades;
	}

	@Get
	@Path("/mobile/atividades/{usuario.email}/{usuario.senha}")
	public List<Atividade> listarAtividades(Usuario usuario) {
		List<Atividade> atividades = new ArrayList<Atividade>();
		try {
			usuario = usuarioModel.autenticar(usuario);
			atividades = atividadeModel.listar(usuario);
		} catch (Exception e) {
			// TODO: handle exception
		}
		return atividades;
	}

	@Get
	@Path("/mobile/atividades/{usuario.email}/{usuario.senha}/atividade/{binario}")
	public String salvar(Usuario usuario, Byte[] binario) {
		try {
			
			byte[] bytes = new byte[binario.length];

			for (int i = 0; i < binario.length; i++) {
				bytes[i] = binario[i].byteValue();
			}
			
			usuario = usuarioModel.autenticar(usuario);
			Atividade atividade = atividadeModel.criar(bytes);
			atividadeModel.finalizar(atividade, atividade.getComentario(),
					atividade.getEsforcoReal());
			return "ok";
		} catch (Exception e) {
			return e.getMessage();
		}
	}

}
